package com.xin.data.simbapesa.analysis

import android.app.Application
import com.xin.data.simbapesa.analysis.libs.AdIdLib
import com.xin.data.simbapesa.analysis.libs.AdjustLib
import com.xin.data.simbapesa.analysis.libs.FirebaseLib
import com.xin.data.simbapesa.analysis.libs.IEvent
import com.xin.data.simbapesa.analysis.libs.RateLib
import com.xin.data.simbapesa.analysis.libs.ReferrerLib
import com.xin.data.simbapesa.api.PU

object AnalysisUtil {

    // 启动时，在没有调用时区接口之前，调用初始化，只初始化部分模块
    fun initOnLaunch(context: Application) {
        try {
            // 保证它先执行
            AdIdLib.init(context)

            // google 归因
            ReferrerLib.fetch(context) {
                // 因为此时还没有调用时区接口拿到服务器转发，故只初始化不用上报
            }

            // firebase 归因
            FirebaseLib.fetch(context) {
                // 因为此时还没有调用时区接口拿到服务器转发，故只初始化不用上报
            }

            // 内部评价
            RateLib.fetch(context)

        } catch (e: Exception) {
            //
        }
    }

    // 时区接口成功返回后，调用初始化，只初始化部分模块
    fun initAfterHadZone(context: Application) {
        try {
            // 保证它先执行
            AdIdLib.init(context)

            // google 归因
            ReferrerLib.fetch(context) { result ->
                // 即使token为空，都调用上传
                // 上传服务器，注意线程执行, 填充path、token、product等
                PU.sendAnalysis(result)
            }

            // adjust 归因
            AdjustLib.fetch(context) { result ->
                // 即使token为空，都调用上传
                // 上传服务器，注意线程执行, 填充path、token、product等
                PU.sendAnalysis(result)
            }

            // firebase 归因
            FirebaseLib.fetch(context) { result ->
                // 即使token为空，都调用上传
                // 上传服务器，注意线程执行, 填充path、token、product等
                PU.sendAnalysis(result)
            }
        } catch (e: Exception) {
            //
        }
    }

    // 登录成功后，调用初始化
    fun initAfterLogin(context: Application) {
        try {
            // 保证它先执行
            AdIdLib.init(context)

            // google 归因
            ReferrerLib.fetch(context) { result ->
                // 即使token为空，都调用上传
                // 上传服务器，注意线程执行, 填充path、token、product等
                PU.sendAnalysis(result)
            }

            // adjust 归因
            AdjustLib.reFetch { result ->
                // 即使token为空，都调用上传
                // 上传服务器，注意线程执行, 填充path、token、product等
                PU.sendAnalysis(result)
            }

            // firebase 归因
            FirebaseLib.fetch(context) { result ->
                // 即使token为空，都调用上传
                // 上传服务器，注意线程执行, 填充path、token、product等
                PU.sendAnalysis(result)
            }

            // facebook 归因
//            FacebookLib.fetch(context) { result ->
//                // 即使token为空，都调用上传
//                // 上传服务器，注意线程执行, 填充path、token、product等
//                PU.sendAnalysis(result)
//            }

        } catch (e: Exception) {
            //
        }
    }

    // 申请接口成功后调用打点
    fun addApplyEvent() {
        AdjustLib.addEvent(IEvent.APPLY)
        FirebaseLib.addEvent(IEvent.APPLY)
    }

    // 登录接口成功后-只有在返回的type==REGISTER时才调用打点
    fun addRegisterEvent() {
        AdjustLib.addEvent(IEvent.REGISTER)
        FirebaseLib.addEvent(IEvent.REGISTER)
    }

    // 所有参数都需要带广告id
    fun advertId(): String {
        return AdIdLib.adId()
    }

    // 所有参数都需要带android id
    fun androidId(): String {
        return AdIdLib.androidId()
    }

    // 所有参数都需要带广告id
    fun advertEnabled(): String {
        return AdIdLib.adEnabled().toString()
    }

    // 所有参数都需要带channel code
    fun channelCode(): String {
        return ReferrerLib.referrer()
    }
}